<?php
class PluginLoader
{
    private $pluginDir;
    
    public function __construct($pluginDir)
    {
        $this->pluginDir = rtrim($pluginDir, '/');
    }

    // 加载插件元信息
    public function getPluginInfo($name)
    {
        $json = $this->pluginDir . "/$name/plugin.json";
        if (!file_exists($json)) return null;
        $info = json_decode(file_get_contents($json), true);
        if (!$info) return null;
        
        // 确保基本信息存在
        $info['name'] = $name;
        return $info;
    }

    // 调用插件的render钩子
    public function render($name, $pluginInfo = null)
    {
        if (!$pluginInfo) {
            $pluginInfo = $this->getPluginInfo($name);
        }
        
        if (!$pluginInfo || empty($pluginInfo['entry'])) {
            return '<div class="text-red-500">插件入口未定义</div>';
        }
        
        $entry = $this->pluginDir . "/$name/" . $pluginInfo['entry'];
        if (!file_exists($entry)) {
            return '<div class="text-red-500">插件入口文件不存在: ' . htmlspecialchars($entry) . '</div>';
        }
        
        // 包含插件文件
        include_once $entry;
        
        // 尝试调用插件渲染函数
        if (function_exists('plugin_render')) {
            ob_start();
            plugin_render($pluginInfo);
            return ob_get_clean();
        } elseif (class_exists('PluginMain')) {
            $obj = new PluginMain();
            return $obj->render($pluginInfo);
        } else {
            return '<div class="text-red-500">插件未实现render钩子</div>';
        }
    }
    
    // 获取所有插件信息
    public function getAllPlugins()
    {
        $plugins = [];
        foreach (glob($this->pluginDir . '/*', GLOB_ONLYDIR) as $dir) {
            $name = basename($dir);
            $info = $this->getPluginInfo($name);
            if ($info) {
                $plugins[] = $info;
            }
        }
        return $plugins;
    }
} 